package etm.servlet.cuotas;


import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import upc.condominio.modelo.ConceptoPago;
import upc.condominio.modelo.Cuota;
import upc.condominio.modelo.CuotaConcepto;
import upc.condominio.modelo.Vivienda;
import etm.excepcion.DAOExcepcion;
import etm.negocio.GestionConceptoPago;
import etm.negocio.GestionRegCuotas;

/**
 * Servlet implementation class GenerarCuotasServlet
 */
@WebServlet("/CuotasItemServlet")
public class CuotasItemServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public CuotasItemServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub		
		this.doPost(request, response);
		
	}
	
	private Cuota cuota= new Cuota();
	/*private Collection<CuotaConcepto> listaItems= new ArrayList<CuotaConcepto>();
	private Collection<CuotaConcepto> listaEliminar= new ArrayList<CuotaConcepto>(); */

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		GestionRegCuotas negocio = new GestionRegCuotas();
		
		try {
			System.out.println("doPost CuotasItem Servlet");
			
			if (request.getSession().getAttribute("CuotaSel")!=null){
				System.out.println("Cargando Cuota Inicial==>"+cuota.getVivienda().getResidente().getNombres() );
				cuota=(Cuota)request.getSession().getAttribute("CuotaSel");
				request.getSession().removeAttribute("CuotaSel");		
				
				request.setAttribute("nombresRes", cuota.getVivienda().getResidente().getNombres());
				request.setAttribute("CuotasConceptosLista", cuota.getLstCuotaConceptosNuevos());
				RequestDispatcher rd = request.getRequestDispatcher("RegistroCuotaItem.jsp");
				rd.forward(request, response);
			
			}else if (request.getParameter("accion2")!=null && request.getParameter("accion2").equalsIgnoreCase("Agregar_Item") ){
			//	request.getSession().setAttribute("CuotaSel", cuota);
				
				System.out.println("Agregando nuevo item  - cantidad de conceptos " + cuota.getLstCuotaConceptosNuevos().size());// eliminar la clase DetalleCuota
				request.setAttribute("nombresRes", cuota.getVivienda().getResidente().getNombres());
				request.setAttribute("cuota.getIdCuota()==>", cuota.getIdCuota());
				
				int idConcepto=Integer.parseInt(request.getParameter("cmbConcepto"));
				Double importe=Double.parseDouble(request.getParameter("txtImporte"));
				request.removeAttribute("Mensaje");
				if (this.validaConcepto(idConcepto)){
					System.out.println("Concepto ya existe");
					request.setAttribute("Mensaje", "Concepto ya existe");			
				}else{					
					CuotaConcepto item= new CuotaConcepto();
					item.getConceptoPago().setIdConcepto(idConcepto);
					item.getConceptoPago().setDescripcion(this.obtenerDescripcionConcepto(idConcepto));					
					item.setFlag("Temporal");
					item.setImporte(importe);
					item.setEstado("Pendiente");
					cuota.getLstCuotaConceptosNuevos().add(item);
				}
				
				request.setAttribute("CuotasConceptosLista", cuota.getLstCuotaConceptosNuevos());
				RequestDispatcher rd = request.getRequestDispatcher("RegistroCuotaItem.jsp");
				rd.forward(request, response);
			}else if ( request.getParameter("accion2")!=null && request.getParameter("accion2").equalsIgnoreCase("Eliminar_Item") ){
				request.setAttribute("nombresRes", cuota.getVivienda().getResidente().getNombres());
				int idConcepto=Integer.parseInt(request.getParameter("idConceptoSel"));
				
				System.out.println("idConcepto a eliminar ==>" + idConcepto);
				for (CuotaConcepto x:cuota.getLstCuotaConceptosNuevos()){
					if (x.getConceptoPago().getIdConcepto()==idConcepto){
						if (x.getFlag().equalsIgnoreCase("Registrado")){
							cuota.getLstCuotaConceptosEliminar().add(x);	
						}
						cuota.getLstCuotaConceptosNuevos().remove(x);
						break;
					}
				}
				
				request.setAttribute("CuotasConceptosLista", cuota.getLstCuotaConceptosNuevos());
				RequestDispatcher rd = request.getRequestDispatcher("RegistroCuotaItem.jsp");
				rd.forward(request, response);
			}else if ( request.getParameter("accion2")!=null  && request.getParameter("accion2").equalsIgnoreCase("Grabar") ){
				System.out.println("Grabar");
				if (cuota.getIdCuota()==0){
					negocio.grabarCuota(cuota);
				}else{
					System.out.println("listaEliminar==>" + cuota.getLstCuotaConceptosEliminar().size() +  "  listaItems Nuevos==>" +cuota.getLstCuotaConceptosNuevos().size());
					negocio.grabaEliminaConcepto(cuota);
				}
				RequestDispatcher rd = request.getRequestDispatcher("RegistroCuotas.jsp");
				rd.forward(request, response);
			}
			
			
			
		} catch (DAOExcepcion e) {
			System.out.println(e.getMessage());
			RequestDispatcher rd = request.getRequestDispatcher("error.jsp");
			rd.forward(request, response);
		}
		
	}
	private Boolean validaConcepto(int idConcepto ){
		Boolean enc=false;
		for (CuotaConcepto x:cuota.getLstCuotaConceptosNuevos()){
			if (x.getConceptoPago().getIdConcepto()==idConcepto){
				enc=true;
				break;
			}
		}
		return enc;
		
	}
	private String obtenerDescripcionConcepto(int idConcepto){
		GestionConceptoPago negocioCP = new GestionConceptoPago() ;
		Collection<ConceptoPago> arrCP;
		String desc= "";
		try {
			arrCP = negocioCP.listar();			
			if(arrCP != null) { 
				for(ConceptoPago x : arrCP) {
					if (x.getIdConcepto()==idConcepto){
						desc=x.getDescripcion();
						break;
					}
				}
			}
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		}
		
		
		return desc;
	}

}
